import { saveAs } from 'file-saver'

/**
 * 格式化文件大小
 * @param size
 */
export const formatSize = (size?: number) => {
  if (!size) return '未知'
  if (size < 1024) return size + ' B'
  if (size < 1024 * 1024) return (size / 1024).toFixed(2) + ' KB'
  if (size < 1024 * 1024 * 1024) return (size / 1024 / 1024).toFixed(2) + ' MB'
  return (size / 1024 / 1024 / 1024).toFixed(2) + ' GB'
}

/**
 * 下载图片
 * @param url 图片下载地址
 * @param fileName 要保存为的文件名
 */
export function downloadImage(url?: string, fileName?: string) {
  // 检查传入的url是否为空，如果为空则直接返回，不执行后续操作
  if (!url) {
    return
  }
  // 调用saveAs函数，传入图片的下载地址和要保存的文件名，进行图片的下载操作
  saveAs(url, fileName)
}

/**
 * 将十六进制颜色转换为标准格式（支持 #、rgb、rgba 格式）
 * @param {string} hex - 输入的十六进制颜色（支持 0x/无前缀，3/4/6/8位）
 * @param {boolean} withAlpha - 是否包含透明度通道（默认 false）
 * @returns {string} 标准颜色格式（#RRGGBB 或 rgba(R,G,B,A)）
 */
export function toHexColor(input: string) {
  // 去掉 0x 前缀
  const colorValue = input.startsWith('0x') ? input.slice(2) : input

  // 将剩余部分解析为十六进制数，再转成 6 位十六进制字符串
  const hexColor = parseInt(colorValue, 16).toString(16).padStart(6, '0')

  // 返回标准 #RRGGBB 格式
  return `#${hexColor}`
}

/**
 * 格式化时间
 * @param time 时间字符串或时间戳
 * @param format 格式化模板，默认为 'YYYY-MM-DD HH:mm:ss'
 * @returns 格式化后的时间字符串
 */
export const formatTime = (
  time?: string | number | Date,
  format = 'YYYY-MM-DD HH:mm:ss',
): string => {
  if (!time) return '-'

  const date = new Date(time)
  if (isNaN(date.getTime())) return '-'

  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')
  const hours = String(date.getHours()).padStart(2, '0')
  const minutes = String(date.getMinutes()).padStart(2, '0')
  const seconds = String(date.getSeconds()).padStart(2, '0')

  return format
    .replace('YYYY', String(year))
    .replace('MM', month)
    .replace('DD', day)
    .replace('HH', hours)
    .replace('mm', minutes)
    .replace('ss', seconds)
}
